package cn.csq.design.behavioral.observer;

import java.util.ArrayList;

/**
 * @author csq
 * @version 1.0.0
 * @ClassName Subject.java
 * @Description 目标 抽象类
 * @createTime 2022年02月12日 15:30:00
 */
public abstract class Subject {


    //抽象 目标对象 用于管理观察者对象的集合和相关的方法的默认实现

    /**
     *观察者对象集合
     */
    protected ArrayList<Observer> observers = new ArrayList<>();


    /**
     * 添加观察者对象到集合中
     * @param observer 观察者
     */
    void attach(Observer observer) {
        observers.add(observer);
        System.out.println("add observer : " + observer);
    }

    /**
     * 将观察者对象剔除出集合
     * @param observer 观察者对象
     */
     void detach(Observer observer){
         observers.remove(observer);
         System.out.println("detach observer : " + observer);
    };

    /**
     * 通知观察者抽象方法
     */
    abstract void notifyObserver();
}
